#include <linux/fs.h>
#include <linux/sched.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <stdarg.h>
#include <asm/segment.h>
#include <linux/kernel.h>

struct task_struct*t;

int sprintf(char*buf,const char*fmt,...)
{
    va_list args;
    int i;
    va_start(args,fmt);
    i=vsprintf(buf,fmt,args);
    va_end(args);
    return i;
}

int ps_read(int dev,char*buf,int count,off_t*f_pos)
{
    int i,j,k,x;
    k=0;
    char*psbuf=malloc(sizeof(char)*1024);
    j=sprintf(psbuf,"pid\tstate\tfather\tcounter\tstart_time\n");
    for(i=0;i<64;i++)
    {
        t=task[i];
        if(t)
        {
            k=sprintf(psbuf+j,"%d\t%d\t%d\t%d\t%d\n",t->pid,t->state,t->father,t->counter,t->start_time);
            j=j+k;
        }
    }
    for(x=0;x<count;x++)
    {
        put_fs_byte(psbuf[x+(*f_pos)],buf+x+(*f_pos));
        if(x+(*f_pos)>=j)
        {
            (*f_pos)=(*f_pos)+x;
            break;
        }
    }
    free(psbuf);
    return x;
}




